ProductExchMappingV3
EXCHANGE-ASSIGNED IDENTIFIERS - one row per (instrument, venue). The ephemeral, hot half of what was one ProductMapping table. | THIS RECORD (exchange) | ProductMapping (registry/vendor) lifecycle | EPHEMERAL - intraday to weekly | PERMANENT identity residency | HOT, resident in every routing | reference data | and ingest process | writers | PER-EXCHANGE FEED HANDLERS | vendor loaders (EDI, GLEIF, OpenFIGI) volume | 10^4 - 10^5, churning daily | one ISIN per instrument The writer axis is the one that forces it rather than merely favours it - the same reason SpreadExchID exists as rows instead of a repeater. A table written by per-venue handlers and by vendor loaders together has two purge horizons and two hot/cold profiles in one resident set. THERE IS NO extKeyType HERE, AND THAT IS THE POINT. For an exchange-assigned identifier the TYPE AND THE AUTHORITY ARE THE SAME FACT - 'CBOE's id for this thing' - so the venue IS the type. mic is key material and no separate type field is needed. That collapses the old venue-scoped-versus-global question rather than answering it.
METADATA
| Attribute | Value |
|---|---|
| Topic | 9100-product-def-core |
| MLink Token | EquityDefinition |
| Product | SRReference |
| accessType | SELECT |
| MLink Endpoint | MLink-Live |
Table Definition
| Field | Type | Key | Default Value | Comment |
|---|---|---|---|---|
| instKey_at | enum - AssetType | PRI | 'None' | as much of the key as instKeyType says is meaningful |
| instKey_ts | enum - TickerSrc | PRI | 'None' | as much of the key as instKeyType says is meaningful |
| instKey_tk | VARCHAR(12) | PRI | '' | as much of the key as instKeyType says is meaningful |
| instKey_yr | SMALLINT UNSIGNED | PRI | 0 | as much of the key as instKeyType says is meaningful |
| instKey_mn | TINYINT UNSIGNED | PRI | 0 | as much of the key as instKeyType says is meaningful |
| instKey_dy | TINYINT UNSIGNED | PRI | 0 | as much of the key as instKeyType says is meaningful |
| instKey_xx | DOUBLE | PRI | 0 | as much of the key as instKeyType says is meaningful |
| instKey_cp | enum - CallPut | PRI | 'Call' | as much of the key as instKeyType says is meaningful |
| instKeyType | enum - SpdrKeyType | PRI | 'None' | THE RUNG Stock ticker only Future expiry Option full key |
| tickerClass | enum - TickerClass | PRI | 'None' | THE ROLE of the ticker portion Ticker CCode Root |
| mic | VARCHAR(4) | PRI | '' | ISO 10383 the venue that assigned the id and the ids TYPE |
| exchID | VARCHAR(30) | SEC | '' | the venues own identifier for this instrument |
| validFrom | DATE | '1900-01-01' | exchange ids are REASSIGNED so a mapping is a window | |
| validTo | DATE | '1900-01-01' | last date this mapping holds empty means still current | |
| pendingDelete | enum - YesNo | 'None' | Yes queued for removal stop resolving against this row | |
| v3Source | enum - V3Source | 'None' | Bridge projected from a legacy record Loader written natively None reads as Loader | |
| timestamp | DATETIME(6) | '1900-01-01 00:00:00.000000' | when this row was last written | |
| exchSymbol | VARCHAR(30) | SEC | '' | the venues text symbol for this instrument empty when the venue assigns none |
PRIMARY KEY DEFINITION (Unique)
| Field | Sequence |
|---|---|
| instKey_tk | 1 |
| instKey_yr | 2 |
| instKey_mn | 3 |
| instKey_dy | 4 |
| instKey_xx | 5 |
| instKey_cp | 6 |
| instKey_at | 7 |
| instKey_ts | 8 |
| instKeyType | 9 |
| tickerClass | 10 |
| mic | 11 |
SECONDARY INDEX (ExchIDIndex) (Not Unique)
| Field | Sequence |
|---|---|
| exchID | 1 |
SECONDARY INDEX (ExchSymbolIndex) (Not Unique)
| Field | Sequence |
|---|---|
| exchSymbol | 1 |
SELECT TABLE EXAMPLE QUERY
SELECT *
FROM `SRReference`.`MsgProductExchMappingV3`
WHERE
/* Replace with a ENUM('None','EQT','IDX','BND','CUR','COM','FUT','SYN','WAR','FLX','MUT','SPD','MM','MF','COIN','TOKEN','ANY','RATE','CRDT','GCR','SWAP','ENT','MBS','SET','LOAN') */
`instKey_at` = 'NONE'
AND
/* Replace with a ENUM('None','SR','NMS','CME','ICE','CFE','CBOT','NYMEX','COMEX','RUT','CIDX','ARCA','NYSE','OTC','NSDQ','MFQS','MIAX','DJI','CUSIP','ISIN','BXE','SCE','ANY','CXE','DXE','NXAM','NXBR','NXLS','NXML','NXOS','NXP','EUREX','CEDX','ICEFEC','ICEFEF','CEQT','TSX','TMX','CRCY','CMDY','DTI','SOVN','SR_US','SR_EU','SR_AP','SR_UK','USD','EUR','GBP','CHF','JPY','CAD','AUD','HKD','KRW','INR','SGD','TWD','CNY','CNH','BRL','MXN','ZAR','SEK','NOK','DKK','PLN','ILS','TRY','NZD','THB','MYR','IDR','PHP','CZK','HUF','SAR','AED','CLP','COP') */
`instKey_ts` = 'NONE'
AND
/* Replace with a VARCHAR(12) */
`instKey_tk` = 'Example_instKey_tk'
AND
/* Replace with a SMALLINT UNSIGNED */
`instKey_yr` = 123
AND
/* Replace with a TINYINT UNSIGNED */
`instKey_mn` = 1
AND
/* Replace with a TINYINT UNSIGNED */
`instKey_dy` = 1
AND
/* Replace with a DOUBLE */
`instKey_xx` = 4.56
AND
/* Replace with a ENUM('Call','Put','Pair') */
`instKey_cp` = 'CALL'
AND
/* Replace with a ENUM('None','Stock','Future','Option','MLeg') */
`instKeyType` = 'NONE'
AND
/* Replace with a ENUM('None','Ticker','CCode','Root') */
`tickerClass` = 'NONE'
AND
/* Replace with a VARCHAR(4) */
`mic` = 'Example_mic';
Doc Columns Query
SELECT * FROM SRReference.doccolumns WHERE TABLE_NAME='ProductExchMappingV3' ORDER BY ordinal_position ASC;